using System;
using System.Collections.Generic;
using System.Text;

//Use different namespaces to simulate multiple deployments of the same type
namespace Crainiate.Data.Persistence.Testing.Step1
{
    public class Entity: Table
    {
        //Property variables
        private int _Id;

        public Entity()
        {
        }   

        [PrimaryKey]
        public virtual int Id
        {
            get
            {
                return _Id;
            }
            set
            {
                _Id = value;
            }
        }
    }
}

//Add a string column (always nullable)
namespace Crainiate.Data.Persistence.Testing.Step2
{
    public class Entity: Table
    {
        //Property variables
        private int _Id;
        private string _FirstNames;

        public Entity()
        {
        }

        [PrimaryKey]
        public virtual int Id
        {
            get
            {
                return _Id;
            }
            set
            {
                _Id = value;
            }
        }

        [Column]
        public virtual string FirstNames
        {
            get
            {
                return _FirstNames;
            }
            set
            {
                _FirstNames = value;
            }
        }
    }
}

//Add a non nullable column 
namespace Crainiate.Data.Persistence.Testing.Step3
{
    public class Entity: Table
    {
        //Property variables
        private int _Id;
        private string _FirstNames;
        private DateTime _DateOfBirth;

        public Entity()
        {
        }

        [PrimaryKey]
        public virtual int Id
        {
            get
            {
                return _Id;
            }
            set
            {
                _Id = value;
            }
        }

        [Column]
        public virtual string FirstNames
        {
            get
            {
                return _FirstNames;
            }
            set
            {
                _FirstNames = value;
            }
        }

        [Column]
        public DateTime DateOfBirth
        {
            get
            {
                return _DateOfBirth;
            }
            set
            {
                _DateOfBirth = value;
            }
        }
    }
}

//Add a string column to be changed
namespace Crainiate.Data.Persistence.Testing.Step4
{
    public class Entity: Table
    {
        //Property variables
        private int _Id;
        private string _FirstNames;
        private DateTime _DateOfBirth;
        private string _Age;

        public Entity()
        {
        }

        [PrimaryKey]
        public virtual int Id
        {
            get
            {
                return _Id;
            }
            set
            {
                _Id = value;
            }
        }

        [Column]
        public virtual string FirstNames
        {
            get
            {
                return _FirstNames;
            }
            set
            {
                _FirstNames = value;
            }
        }

        [Column]
        public DateTime DateOfBirth
        {
            get
            {
                return _DateOfBirth;
            }
            set
            {
                _DateOfBirth = value;
            }
        }

        [Column]
        public virtual string Age
        {
            get
            {
                return _Age;
            }
            set
            {
                _Age = value;
            }
        }
    }
}

//Change string column to int, add a temp column
namespace Crainiate.Data.Persistence.Testing.Step5
{
    public class Entity: Table
    {
        //Property variables
        private int _Id;
        private string _FirstNames;
        private DateTime _DateOfBirth;
        private Nullable<int> _Age;
        private int _Temp;

        public Entity()
        {
        }

        [PrimaryKey]
        public virtual int Id
        {
            get
            {
                return _Id;
            }
            set
            {
                _Id = value;
            }
        }

        [Column]
        public virtual string FirstNames
        {
            get
            {
                return _FirstNames;
            }
            set
            {
                _FirstNames = value;
            }
        }

        [Column]
        public DateTime DateOfBirth
        {
            get
            {
                return _DateOfBirth;
            }
            set
            {
                _DateOfBirth = value;
            }
        }

        [Column]
        public virtual Nullable<int> Age
        {
            get
            {
                return _Age;
            }
            set
            {
                _Age = value;
            }
        }

        [Column]
        public virtual int Temp
        {
            get
            {
                return _Temp;
            }
            set
            {
                _Temp = value;
            }
        }
    }
}

//Remove temp column
namespace Crainiate.Data.Persistence.Testing.Step6
{
    public class Entity: Table
    {
        //Property variables
        private int _Id;
        private string _FirstNames;
        private DateTime _DateOfBirth;
        private Nullable<int> _Age;

        public Entity()
        {
        }

        [PrimaryKey]
        public virtual int Id
        {
            get
            {
                return _Id;
            }
            set
            {
                _Id = value;
            }
        }

        [Column]
        public virtual string FirstNames
        {
            get
            {
                return _FirstNames;
            }
            set
            {
                _FirstNames = value;
            }
        }

        [Column]
        public DateTime DateOfBirth
        {
            get
            {
                return _DateOfBirth;
            }
            set
            {
                _DateOfBirth = value;
            }
        }

        [Column]
        public virtual Nullable<int> Age
        {
            get
            {
                return _Age;
            }
            set
            {
                _Age = value;
            }
        }
    }
}
